package daohibernate;

import hibernate.HibernateUtil;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import negocio.beans.central.ItemListaPrecio;
import negocio.beans.central.ListaPrecio;
import negocio.beans.central.Proveedor;

import org.hibernate.Session;
import org.hibernate.SessionFactory;


public class ListaPrecioDAO {
	private static ListaPrecioDAO instancia = null;
	private static SessionFactory sf = null;	
	
	public static ListaPrecioDAO getInstancia(){
		if(instancia == null){
			sf = HibernateUtil.getSessionFactory();
			instancia = new ListaPrecioDAO();
		} 
		return instancia;
	}
	
	public void altaListaPrecio(ListaPrecio listaPrecio){
		Session s = sf.openSession();
		s.beginTransaction();
		
		s.persist(listaPrecio);
		
		s.flush();
		s.getTransaction().commit();
	}
	
	public ListaPrecio traerListaPrecio(String tipo, String cuil){
		Session s = sf.openSession();

		@SuppressWarnings("unchecked")
		List<ListaPrecio> listaprecio =  s.createQuery("from ListaPrecio where tipo = '" + tipo + "' and proveedor =  " + cuil ).list();
		s.close();
		
		for(ListaPrecio p : listaprecio){
			return p;
		}
		
		return null;
		
	}
	
	public void modificacionListaPrecio(int id){
		Session s = sf.openSession();
		s.beginTransaction();
		
		ListaPrecio l = (ListaPrecio) s.load(ListaPrecio.class,id);
		s.update(l);
		
		s.flush();
		s.getTransaction().commit();
	}
	
	public void bajaListaPrecio(int id){
		Session s = sf.openSession();
		s.beginTransaction();
		
		ListaPrecio l = (ListaPrecio) s.load(ListaPrecio.class,id);
		s.delete(l);
		
		s.flush();
		s.getTransaction().commit();
	}
	
	public ListaPrecio buscarListaPrecio(int idListaPrecio){

		Session s = sf.openSession();

		@SuppressWarnings("unchecked")
		List<ListaPrecio> q = s.createQuery("from ListaPrecio where id_listaPrecio = " + idListaPrecio + "").list();
		
		for(ListaPrecio l : q){
			return l;
		}
		s.close();
		
		return null;

	}
	
	public Set<ListaPrecio> obtenerListasPrecio(){
		
		Session s = sf.openSession();

		@SuppressWarnings("unchecked")
//		Iterator<Object> listas = s.createQuery("from ListaPrecio L join L.items").iterate();
		Set<ListaPrecio> resultado = new HashSet<ListaPrecio>();
//		
//		ListaPrecio l = new ListaPrecio();
		
//		if(listas.hasNext()){
//			Object[] tupla = (Object[]) listas.next();
//			l = (ListaPrecio)tupla[0];
//			ItemListaPrecio it = (ItemListaPrecio)tupla[1];
//			l.getItems().add(it);
//		}
//		
//		while(listas.hasNext()){
//			Object[] tupla = (Object[]) listas.next();
//
//			if(!l.equals((ListaPrecio)tupla[0])){
//				resultado.add(l);
//				l = (ListaPrecio)tupla[0];				
//			}
//			ItemListaPrecio it = (ItemListaPrecio)tupla[1];
//			l.getItems().add(it);
//
//		}
		
		return resultado;
	}
	
	public List<ListaPrecio> obtenerListasPrecio(String razonSocial){
		
		Session s = sf.openSession();

		@SuppressWarnings("unchecked")
		Iterator<Object> listas = s.createQuery("from ListaPrecio L join L.proveedor where L.proveedor.razonSocial = '" + razonSocial + "'").iterate();
		List<ListaPrecio> resultado = new ArrayList<ListaPrecio>();
		
		ListaPrecio l;
				
		
		while(listas.hasNext()){
			Object[] tupla = (Object[]) listas.next();
			l = (ListaPrecio)tupla[0];						
			resultado.add(l);
		}
		
		return resultado;
	}
}
